/*
* INSANE - Interactive Structural Analysis Environment
*
* Copyright (C) 2003-2006
* Universidade Federal de Minas Gerais
* Escola de Engenharia
* Departamento de Engenharia de Estruturas
* 
* Author's email :    insane@dees.ufmg.br
* Author's website :  http://www.dees.ufmg.br/insane
* 
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or any later version.
* 
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
* 
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/
package br.ufmg.dees.insane.continuousPointModel;

import br.ufmg.dees.insane.util.IMatrix;
import br.ufmg.dees.insane.util.IVector;

/**
*A class representing an analysis model.
*
*@author Pitangueira, Roque, & CENOURA & Fuina, Jamile
*@version 1.0
*@since September 2006
*/
public interface ContinuousPointModel {

	/* (non-Javadoc)
	 * @see br.ufmg.dees.insane.analysisModel.AnalysisModel#getInternalVariableOperator(br.ufmg.dees.insane.util.IMatrix, br.ufmg.dees.insane.util.IMatrix, br.ufmg.dees.insane.util.IVector, br.ufmg.dees.insane.util.IMatrix)
	 */
	public IMatrix getInternalVariableOperator(IMatrix d, IMatrix d2, IVector n, IMatrix c);

	/* (non-Javadoc)
	 * @see br.ufmg.dees.insane.analysisModel.AnalysisModel#getInternalVariableOperator(br.ufmg.dees.insane.util.IMatrix, br.ufmg.dees.insane.util.IMatrix, br.ufmg.dees.insane.util.IVector, br.ufmg.dees.insane.util.IMatrix, br.ufmg.dees.insane.util.IMatrix)
	 */
//	public IMatrix getInternalVariableOperator(IMatrix d, IMatrix d2, IVector n, IMatrix c, IMatrix u);
	

	/* (non-Javadoc)
	 * @see br.ufmg.dees.insane.analysisModel.AnalysisModel#getDualInternalVariableOperator(br.ufmg.dees.insane.util.IMatrix)
	 */
	public IMatrix getDualInternalVariableOperator(IMatrix e);

	/* (non-Javadoc)
	 * @see br.ufmg.dees.insane.analysisModel.AnalysisModel#modifyInternalVariableOperator(br.ufmg.dees.insane.util.IMatrix, br.ufmg.dees.insane.util.IMatrix)
	 */
//	public IMatrix modifyInternalVariableOperator(IMatrix e, IMatrix p);
//
//	/* (non-Javadoc)
//	 * @see br.ufmg.dees.insane.analysisModel.AnalysisModel#modifyDualInternalVariableOperator(br.ufmg.dees.insane.util.IMatrix, java.util.ArrayList)
//	 */
//	public IMatrix modifyDualInternalVariableOperator(IMatrix e, GeometricProperties gps);

	/* (non-Javadoc)
	 * @see br.ufmg.dees.insane.analysisModel.AnalysisModel#getNumberOfInternalVariables()
	 */
	public int getNumberOfInternalVariables();

	/* (non-Javadoc)
	 * @see br.ufmg.dees.insane.analysisModel.AnalysisModel#getNumberOfDualInternalVariables()
	 */
	public int getNumberOfDualInternalVariables();

	/* (non-Javadoc)
	 * @see br.ufmg.dees.insane.analysisModel.AnalysisModel#getInternalVariablesVector(br.ufmg.dees.insane.util.IVector, br.ufmg.dees.insane.util.IMatrix)
	 */
//	public IVector getInternalVariablesVector(IVector a, IMatrix b);
//
//	/* (non-Javadoc)
//	 * @see br.ufmg.dees.insane.analysisModel.AnalysisModel#getDualInternalVariablesVector(br.ufmg.dees.insane.util.IVector, br.ufmg.dees.insane.util.IMatrix)
//	 */
//	public IVector getDualInternalVariablesVector(IVector a, IMatrix b);
//
//	/* (non-Javadoc)
//	 * @see br.ufmg.dees.insane.analysisModel.AnalysisModel#getInternalVariablesTensor(br.ufmg.dees.insane.util.IVector, br.ufmg.dees.insane.util.IMatrix)
//	 */
//	public IMatrix getInternalVariablesTensor(IVector a, IMatrix b);
//
//	/* (non-Javadoc)
//	 * @see br.ufmg.dees.insane.analysisModel.AnalysisModel#getDualInternalVariablesTensor(br.ufmg.dees.insane.util.IVector, br.ufmg.dees.insane.util.IMatrix)
//	 */
//	public IMatrix getDualInternalVariablesTensor(IVector a, IMatrix b);

	/* (non-Javadoc)
	 * @see br.ufmg.dees.insane.analysisModel.AnalysisModel#getInternalVariablesDirLabels()
	 */
	public String[] getInternalVariablesLabels();

	/* (non-Javadoc)
	 * @see br.ufmg.dees.insane.analysisModel.AnalysisModel#getDualInternalVariablesDirLabels()
	 */
	public String[] getDualInternalVariablesLabels();

	/* (non-Javadoc)
	 * @see br.ufmg.dees.insane.analysisModel.AnalysisModel#expandVector(br.ufmg.dees.insane.util.IVector)
	 */
	public IVector expandVector(IVector a);

	/* (non-Javadoc)
	 * @see br.ufmg.dees.insane.analysisModel.AnalysisModel#expandTensor(br.ufmg.dees.insane.util.IVector)
	 */
	public IMatrix expandTensor(IVector a);

	/* (non-Javadoc)
	 * @see br.ufmg.dees.insane.analysisModel.AnalysisModel#reduceVector(br.ufmg.dees.insane.util.IVector)
	 */
	public IVector reduceVector(IVector a);

	/* (non-Javadoc)
	 * @see br.ufmg.dees.insane.analysisModel.AnalysisModel#reduceTensor(br.ufmg.dees.insane.util.IMatrix)
	 */
	public IVector reduceTensor(IMatrix a);

	/* (non-Javadoc)
	 * @see br.ufmg.dees.insane.analysisModel.AnalysisModel#getLabel()
	 */
	public String getLabel();

//	/* (non-Javadoc)
//	 * @see br.ufmg.dees.insane.analysisModel.AnalysisModel#getDominion()
//	 */
//	public int getDominion();
//
//	/* (non-Javadoc)
//	 * @see br.ufmg.dees.insane.analysisModel.AnalysisModel#getIntegrationFactor(br.ufmg.dees.insane.util.IVector, br.ufmg.dees.insane.util.IMatrix, java.util.ArrayList)
//	 */
//	public double getIntegrationFactor(IVector n, IMatrix cN, GeometricProperties gps);
//
//	/* (non-Javadoc)
//	 * @see br.ufmg.dees.insane.analysisModel.AnalysisModel#getDOFLabels(int)
//	 */
//	public ArrayList getDOFLabels(int n);

}
